{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 第三周作业 在Rental Listing Inquiries数据上练习xgboost参数调优\n",
    "数据说明： Rental Listing Inquiries数据集是Kaggle平台上的一个分类竞赛任务，需要根据公寓的特征来预测其受欢迎程度（用户感兴趣程度分为高、中、低三类）。其中房屋的特征x共有14维，响应值y为用户对该公寓的感兴趣程度。评价标准为logloss。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调整n_estimators参数"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入必要的包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "get_ipython().magic('matplotlib inline')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "读取经过特征工程处理好的训练和测试CSV文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "dpath = \"./data/\"\n",
    "train = pd.read_csv(dpath + \"RentListingInquries_FE_train.csv\")\n",
    "test = pd.read_csv(dpath + \"RentListingInquries_FE_test.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 49352 entries, 0 to 49351\n",
      "Columns: 228 entries, bathrooms to interest_level\n",
      "dtypes: float64(9), int64(219)\n",
      "memory usage: 85.8 MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>49352.00000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>4.935200e+04</td>\n",
       "      <td>4.935200e+04</td>\n",
       "      <td>4.935200e+04</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.0</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "      <td>49352.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.21218</td>\n",
       "      <td>1.541640</td>\n",
       "      <td>3.830174e+03</td>\n",
       "      <td>1.697863e+03</td>\n",
       "      <td>1.657567e+03</td>\n",
       "      <td>-0.329460</td>\n",
       "      <td>2.753820</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>5.014852</td>\n",
       "      <td>15.206881</td>\n",
       "      <td>...</td>\n",
       "      <td>0.003080</td>\n",
       "      <td>0.000385</td>\n",
       "      <td>0.186477</td>\n",
       "      <td>0.009361</td>\n",
       "      <td>0.000446</td>\n",
       "      <td>0.028165</td>\n",
       "      <td>0.002026</td>\n",
       "      <td>0.001013</td>\n",
       "      <td>0.000952</td>\n",
       "      <td>1.616895</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.50142</td>\n",
       "      <td>1.115018</td>\n",
       "      <td>2.206687e+04</td>\n",
       "      <td>1.100477e+04</td>\n",
       "      <td>7.817996e+03</td>\n",
       "      <td>0.947732</td>\n",
       "      <td>1.446091</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.824442</td>\n",
       "      <td>8.280749</td>\n",
       "      <td>...</td>\n",
       "      <td>0.055412</td>\n",
       "      <td>0.019618</td>\n",
       "      <td>0.389495</td>\n",
       "      <td>0.101625</td>\n",
       "      <td>0.021109</td>\n",
       "      <td>0.165446</td>\n",
       "      <td>0.044969</td>\n",
       "      <td>0.031814</td>\n",
       "      <td>0.030846</td>\n",
       "      <td>0.626035</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.300000e+01</td>\n",
       "      <td>2.150000e+01</td>\n",
       "      <td>4.300000e+01</td>\n",
       "      <td>-5.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.500000e+03</td>\n",
       "      <td>1.225000e+03</td>\n",
       "      <td>1.066667e+03</td>\n",
       "      <td>-1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.150000e+03</td>\n",
       "      <td>1.500000e+03</td>\n",
       "      <td>1.383417e+03</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.00000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>4.100000e+03</td>\n",
       "      <td>1.850000e+03</td>\n",
       "      <td>1.962500e+03</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>10.00000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>4.490000e+06</td>\n",
       "      <td>2.245000e+06</td>\n",
       "      <td>1.496667e+06</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>13.500000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>31.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "         bathrooms      bedrooms         price  price_bathrooms  \\\n",
       "count  49352.00000  49352.000000  4.935200e+04     4.935200e+04   \n",
       "mean       1.21218      1.541640  3.830174e+03     1.697863e+03   \n",
       "std        0.50142      1.115018  2.206687e+04     1.100477e+04   \n",
       "min        0.00000      0.000000  4.300000e+01     2.150000e+01   \n",
       "25%        1.00000      1.000000  2.500000e+03     1.225000e+03   \n",
       "50%        1.00000      1.000000  3.150000e+03     1.500000e+03   \n",
       "75%        1.00000      2.000000  4.100000e+03     1.850000e+03   \n",
       "max       10.00000      8.000000  4.490000e+06     2.245000e+06   \n",
       "\n",
       "       price_bedrooms     room_diff      room_num     Year         Month  \\\n",
       "count    4.935200e+04  49352.000000  49352.000000  49352.0  49352.000000   \n",
       "mean     1.657567e+03     -0.329460      2.753820   2016.0      5.014852   \n",
       "std      7.817996e+03      0.947732      1.446091      0.0      0.824442   \n",
       "min      4.300000e+01     -5.000000      0.000000   2016.0      4.000000   \n",
       "25%      1.066667e+03     -1.000000      2.000000   2016.0      4.000000   \n",
       "50%      1.383417e+03      0.000000      2.000000   2016.0      5.000000   \n",
       "75%      1.962500e+03      0.000000      4.000000   2016.0      6.000000   \n",
       "max      1.496667e+06      8.000000     13.500000   2016.0      6.000000   \n",
       "\n",
       "                Day       ...                walk         walls           war  \\\n",
       "count  49352.000000       ...        49352.000000  49352.000000  49352.000000   \n",
       "mean      15.206881       ...            0.003080      0.000385      0.186477   \n",
       "std        8.280749       ...            0.055412      0.019618      0.389495   \n",
       "min        1.000000       ...            0.000000      0.000000      0.000000   \n",
       "25%        8.000000       ...            0.000000      0.000000      0.000000   \n",
       "50%       15.000000       ...            0.000000      0.000000      0.000000   \n",
       "75%       22.000000       ...            0.000000      0.000000      0.000000   \n",
       "max       31.000000       ...            1.000000      1.000000      1.000000   \n",
       "\n",
       "             washer         water    wheelchair          wifi       windows  \\\n",
       "count  49352.000000  49352.000000  49352.000000  49352.000000  49352.000000   \n",
       "mean       0.009361      0.000446      0.028165      0.002026      0.001013   \n",
       "std        0.101625      0.021109      0.165446      0.044969      0.031814   \n",
       "min        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "25%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "50%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "75%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "max        2.000000      1.000000      1.000000      1.000000      1.000000   \n",
       "\n",
       "               work  interest_level  \n",
       "count  49352.000000    49352.000000  \n",
       "mean       0.000952        1.616895  \n",
       "std        0.030846        0.626035  \n",
       "min        0.000000        0.000000  \n",
       "25%        0.000000        1.000000  \n",
       "50%        0.000000        2.000000  \n",
       "75%        0.000000        2.000000  \n",
       "max        1.000000        2.000000  \n",
       "\n",
       "[8 rows x 228 columns]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2950</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>1475.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>950.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3758</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>1879.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>3</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>3300</td>\n",
       "      <td>1650.000000</td>\n",
       "      <td>1100.000000</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>11</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2</td>\n",
       "      <td>4900</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>1633.333333</td>\n",
       "      <td>0.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.0         1   2950      1475.000000     1475.000000        0.0   \n",
       "1        1.0         2   2850      1425.000000      950.000000       -1.0   \n",
       "2        1.0         1   3758      1879.000000     1879.000000        0.0   \n",
       "3        1.0         2   3300      1650.000000     1100.000000       -1.0   \n",
       "4        2.0         2   4900      1633.333333     1633.333333        0.0   \n",
       "\n",
       "   room_num  Year  Month  Day  ...   virtual  walk  walls  war  washer  water  \\\n",
       "0       2.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "1       3.0  2016      6   24  ...         0     0      0    1       0      0   \n",
       "2       2.0  2016      6    3  ...         0     0      0    0       0      0   \n",
       "3       3.0  2016      6   11  ...         0     0      0    0       0      0   \n",
       "4       4.0  2016      4   12  ...         0     0      0    1       0      0   \n",
       "\n",
       "   wheelchair  wifi  windows  work  \n",
       "0           0     0        0     0  \n",
       "1           0     0        0     0  \n",
       "2           0     0        0     0  \n",
       "3           1     0        0     0  \n",
       "4           0     0        0     0  \n",
       "\n",
       "[5 rows x 227 columns]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 74659 entries, 0 to 74658\n",
      "Columns: 227 entries, bathrooms to work\n",
      "dtypes: float64(9), int64(218)\n",
      "memory usage: 129.3 MB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>virtual</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>7.465900e+04</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.0</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "      <td>74659.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>1.212915</td>\n",
       "      <td>1.544663</td>\n",
       "      <td>3.749033e+03</td>\n",
       "      <td>1658.561183</td>\n",
       "      <td>1631.330597</td>\n",
       "      <td>-0.331748</td>\n",
       "      <td>2.757578</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>5.015738</td>\n",
       "      <td>15.151623</td>\n",
       "      <td>...</td>\n",
       "      <td>0.001058</td>\n",
       "      <td>0.003094</td>\n",
       "      <td>0.000442</td>\n",
       "      <td>0.188243</td>\n",
       "      <td>0.008653</td>\n",
       "      <td>0.000388</td>\n",
       "      <td>0.027994</td>\n",
       "      <td>0.002156</td>\n",
       "      <td>0.001085</td>\n",
       "      <td>0.000884</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.649820</td>\n",
       "      <td>1.107014</td>\n",
       "      <td>9.713092e+03</td>\n",
       "      <td>4771.933806</td>\n",
       "      <td>4482.208640</td>\n",
       "      <td>1.026154</td>\n",
       "      <td>1.497497</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.825815</td>\n",
       "      <td>8.245418</td>\n",
       "      <td>...</td>\n",
       "      <td>0.032922</td>\n",
       "      <td>0.055539</td>\n",
       "      <td>0.021020</td>\n",
       "      <td>0.390908</td>\n",
       "      <td>0.097548</td>\n",
       "      <td>0.019705</td>\n",
       "      <td>0.164957</td>\n",
       "      <td>0.046388</td>\n",
       "      <td>0.032921</td>\n",
       "      <td>0.029720</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000e+00</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>-6.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.495000e+03</td>\n",
       "      <td>1220.000000</td>\n",
       "      <td>1065.000000</td>\n",
       "      <td>-1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>3.150000e+03</td>\n",
       "      <td>1500.000000</td>\n",
       "      <td>1377.500000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>4.100000e+03</td>\n",
       "      <td>1850.000000</td>\n",
       "      <td>1950.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>4.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>22.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>112.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>1.675000e+06</td>\n",
       "      <td>837500.000000</td>\n",
       "      <td>558333.333333</td>\n",
       "      <td>109.000000</td>\n",
       "      <td>115.000000</td>\n",
       "      <td>2016.0</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>31.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 227 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          bathrooms      bedrooms         price  price_bathrooms  \\\n",
       "count  74659.000000  74659.000000  7.465900e+04     74659.000000   \n",
       "mean       1.212915      1.544663  3.749033e+03      1658.561183   \n",
       "std        0.649820      1.107014  9.713092e+03      4771.933806   \n",
       "min        0.000000      0.000000  1.000000e+00         0.500000   \n",
       "25%        1.000000      1.000000  2.495000e+03      1220.000000   \n",
       "50%        1.000000      1.000000  3.150000e+03      1500.000000   \n",
       "75%        1.000000      2.000000  4.100000e+03      1850.000000   \n",
       "max      112.000000      7.000000  1.675000e+06    837500.000000   \n",
       "\n",
       "       price_bedrooms     room_diff      room_num     Year         Month  \\\n",
       "count    74659.000000  74659.000000  74659.000000  74659.0  74659.000000   \n",
       "mean      1631.330597     -0.331748      2.757578   2016.0      5.015738   \n",
       "std       4482.208640      1.026154      1.497497      0.0      0.825815   \n",
       "min          0.333333     -6.000000      0.000000   2016.0      4.000000   \n",
       "25%       1065.000000     -1.000000      2.000000   2016.0      4.000000   \n",
       "50%       1377.500000      0.000000      2.000000   2016.0      5.000000   \n",
       "75%       1950.000000      0.000000      4.000000   2016.0      6.000000   \n",
       "max     558333.333333    109.000000    115.000000   2016.0      6.000000   \n",
       "\n",
       "                Day      ...            virtual          walk         walls  \\\n",
       "count  74659.000000      ...       74659.000000  74659.000000  74659.000000   \n",
       "mean      15.151623      ...           0.001058      0.003094      0.000442   \n",
       "std        8.245418      ...           0.032922      0.055539      0.021020   \n",
       "min        1.000000      ...           0.000000      0.000000      0.000000   \n",
       "25%        8.000000      ...           0.000000      0.000000      0.000000   \n",
       "50%       15.000000      ...           0.000000      0.000000      0.000000   \n",
       "75%       22.000000      ...           0.000000      0.000000      0.000000   \n",
       "max       31.000000      ...           2.000000      1.000000      1.000000   \n",
       "\n",
       "                war        washer         water    wheelchair          wifi  \\\n",
       "count  74659.000000  74659.000000  74659.000000  74659.000000  74659.000000   \n",
       "mean       0.188243      0.008653      0.000388      0.027994      0.002156   \n",
       "std        0.390908      0.097548      0.019705      0.164957      0.046388   \n",
       "min        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "25%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "50%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "75%        0.000000      0.000000      0.000000      0.000000      0.000000   \n",
       "max        1.000000      2.000000      1.000000      1.000000      1.000000   \n",
       "\n",
       "            windows          work  \n",
       "count  74659.000000  74659.000000  \n",
       "mean       0.001085      0.000884  \n",
       "std        0.032921      0.029720  \n",
       "min        0.000000      0.000000  \n",
       "25%        0.000000      0.000000  \n",
       "50%        0.000000      0.000000  \n",
       "75%        0.000000      0.000000  \n",
       "max        1.000000      1.000000  \n",
       "\n",
       "[8 rows x 227 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看样本分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0xc2a2128>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZUAAAELCAYAAAARNxsIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFuZJREFUeJzt3X/wXXWd3/HniwDqVm2CfLWYxIbR\ntBptDfotpNLpuGgh0GkTd2QXpkqWMhN1YNXZnR1xpyMuysw6u8qIq8ywQyTZcQUWtaRO3GyGxVpY\nfiRoBEK0+RapRCgEAwraxYG++8f9fPWa3OR7E87NzTd5PmbO3HPf5/M593P4Tnx5zvncc1NVSJLU\nhWPGPQBJ0pHDUJEkdcZQkSR1xlCRJHXGUJEkdcZQkSR1xlCRJHXGUJEkdcZQkSR15thxD+BQO/HE\nE2vRokXjHoYkzSr33HPPE1U1MVO7oy5UFi1axJYtW8Y9DEmaVZL872HaeflLktSZkYVKkhcnuTvJ\nd5NsS/LHrX5dkh8k2dqWpa2eJFclmUpyb5K39O1rVZIdbVnVV39rkvtan6uSZFTHI0ma2Sgvfz0L\nnFFVzyQ5DrgtyTfatj+sqpv2aH82sLgtpwFXA6clOQG4DJgECrgnyfqqerK1WQ3cCWwAlgPfQJI0\nFiM7U6meZ9rb49qyv+fsrwDWtX53AnOTnAScBWyqqt0tSDYBy9u2l1fVHdV7fv86YOWojkeSNLOR\n3lNJMifJVuBxesFwV9t0RbvEdWWSF7XafODhvu47W21/9Z0D6oPGsTrJliRbdu3a9YKPS5I02EhD\npaqer6qlwALg1CRvAj4KvB74V8AJwEda80H3Q+og6oPGcU1VTVbV5MTEjDPiJEkH6ZDM/qqqp4Bv\nAsur6tF2ietZ4IvAqa3ZTmBhX7cFwCMz1BcMqEuSxmSUs78mksxt6y8B3gl8r90Loc3UWgnc37qs\nBy5os8CWAT+pqkeBjcCZSeYlmQecCWxs255Osqzt6wLg5lEdjyRpZqOc/XUSsDbJHHrhdWNVfT3J\n3yWZoHf5aivw/tZ+A3AOMAX8HLgQoKp2J/kEsLm1u7yqdrf1DwDXAS+hN+vLmV+SNEbpTZw6ekxO\nTpbfqJcOb6d/7vRxD+GId/vv3X5A7ZPcU1WTM7XzG/WSpM4YKpKkzhgqkqTOGCqSpM4YKpKkzhgq\nkqTOGCqSpM4YKpKkzhgqkqTOGCqSpM4YKpKkzhgqkqTOGCqSpM4YKpKkzhgqkqTOGCqSpM4YKpKk\nzhgqkqTOGCqSpM4YKpKkzhgqkqTOjCxUkrw4yd1JvptkW5I/bvWTk9yVZEeSG5Ic3+ovau+n2vZF\nffv6aKt/P8lZffXlrTaV5NJRHYskaTijPFN5Fjijqt4MLAWWJ1kGfAq4sqoWA08CF7X2FwFPVtXr\ngCtbO5IsAc4D3ggsB76QZE6SOcDngbOBJcD5ra0kaUxGFirV80x7e1xbCjgDuKnV1wIr2/qK9p62\n/R1J0urXV9WzVfUDYAo4tS1TVfVgVf0CuL61lSSNyUjvqbQziq3A48Am4H8BT1XVc63JTmB+W58P\nPAzQtv8EeEV/fY8++6pLksZkpKFSVc9X1VJgAb0zizcMatZes49tB1rfS5LVSbYk2bJr166ZBy5J\nOiiHZPZXVT0FfBNYBsxNcmzbtAB4pK3vBBYCtO3/GNjdX9+jz77qgz7/mqqarKrJiYmJLg5JkjTA\nKGd/TSSZ29ZfArwT2A7cCry7NVsF3NzW17f3tO1/V1XV6ue12WEnA4uBu4HNwOI2m+x4ejfz14/q\neCRJMzt25iYH7SRgbZuldQxwY1V9PckDwPVJPgl8B7i2tb8W+MskU/TOUM4DqKptSW4EHgCeAy6u\nqucBklwCbATmAGuqatsIj0eSNIORhUpV3QucMqD+IL37K3vW/wE4dx/7ugK4YkB9A7DhBQ9WktQJ\nv1EvSeqMoSJJ6oyhIknqjKEiSeqMoSJJ6oyhIknqjKEiSeqMoSJJ6oyhIknqjKEiSeqMoSJJ6oyh\nIknqjKEiSeqMoSJJ6oyhIknqjKEiSeqMoSJJ6oyhIknqjKEiSeqMoSJJ6oyhIknqzMhCJcnCJLcm\n2Z5kW5IPtfrHk/woyda2nNPX56NJppJ8P8lZffXlrTaV5NK++slJ7kqyI8kNSY4f1fFIkmY2yjOV\n54A/qKo3AMuAi5MsaduurKqlbdkA0LadB7wRWA58IcmcJHOAzwNnA0uA8/v286m2r8XAk8BFIzwe\nSdIMRhYqVfVoVX27rT8NbAfm76fLCuD6qnq2qn4ATAGntmWqqh6sql8A1wMrkgQ4A7ip9V8LrBzN\n0UiShnFI7qkkWQScAtzVSpckuTfJmiTzWm0+8HBft52ttq/6K4Cnquq5PeqSpDEZeagkeSnwFeDD\n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\n+vP/qqr+Jslm4MYkFwE/BM5t7TcA5wBTwM+BCwGqaneSTwCbW7vLq2r3oTsMSdKeDnmoVNWDwJsH\n1H8MvGNAvYCL97GvNcCarscoSTo4h9OUYknSLGeoSJI6M64pxbPCW/9w3biHcMS7508vGPcQJHXI\nMxVJUmcMFUlSZwwVSVJnDBVJUmcMFUlSZwwVSVJnDBVJUmcMFUlSZwwVSVJnDBVJUmcMFUlSZwwV\nSVJnDBVJUmcMFUlSZwwVSVJnDBVJUmcMFUlSZwwVSVJnZn2oJFme5PtJppJcOu7xSNLRbFaHSpI5\nwOeBs4ElwPlJlox3VJJ09JrVoQKcCkxV1YNV9QvgemDFmMckSUet2R4q84GH+97vbDVJ0hgcO+4B\nvEAZUKu9GiWrgdXt7TNJvj/SUY3XicAT4x7EsPJnq8Y9hMPJrPrbAXDZoH+CR61Z9ffLBw/4b/dP\nh2k020NlJ7Cw7/0C4JE9G1XVNcA1h2pQ45RkS1VNjnscOnD+7WY3/349s/3y12ZgcZKTkxwPnAes\nH/OYJOmoNavPVKrquSSXABuBOcCaqto25mFJ0lFrVocKQFVtADaMexyHkaPiMt8Ryr/d7ObfD0jV\nXve1JUk6KLP9nook6TBiqBwhfFzN7JVkTZLHk9w/7rHowCRZmOTWJNuTbEvyoXGPady8/HUEaI+r\n+Z/Av6M3zXozcH5VPTDWgWkoSf4t8AywrqreNO7xaHhJTgJOqqpvJ3kZcA+w8mj+t+eZypHBx9XM\nYlX1LWD3uMehA1dVj1bVt9v608B2jvKnehgqRwYfVyONWZJFwCnAXeMdyXgZKkeGoR5XI2k0krwU\n+Arw4ar66bjHM06GypFhqMfVSOpekuPoBcqXquqr4x7PuBkqRwYfVyONQZIA1wLbq+oz4x7P4cBQ\nOQJU1XPA9ONqtgM3+ria2SPJl4E7gH+eZGeSi8Y9Jg3tdOC9wBlJtrblnHEPapycUixJ6oxnKpKk\nzhgqkqTOGCqSpM4YKpKkzhgqkqTOGCqSpM4YKhKQ5O+HaPPhJL8x4nEsnel7Dkl+N8mfd/y5ne9T\nRydDRQKq6m1DNPswcECh0n6W4EAsBY7qL89pdjNUJCDJM+317Um+meSmJN9L8qX0fBB4NXBrkltb\n2zOT3JHk20n+uj1UkCQPJflYktuAc5O8NsnfJLknyf9I8vrW7twk9yf5bpJvtUfsXA78Tvtm9u8M\nMe6JJF9Jsrktpyc5po1hbl+7qSSvGtS+8/+YOqodO+4BSIehU4A30nso5+3A6VV1VZLfB36zqp5I\nciLwX4B3VtXPknwE+H16oQDwD1X1bwCS3AK8v6p2JDkN+AJwBvAx4Kyq+lGSuVX1iyQfAyar6pIh\nx/pZ4Mqqui3Ja4CNVfWGJDcD7wK+2D7zoap6LMlf7dkeeMML/O8l/ZKhIu3t7qraCZBkK7AIuG2P\nNsuAJcDtvWcKcjy953dNu6H1fynwNuCvWzuAF7XX24HrktwIHOzTbd8JLOnb98vbLxDeQC+0vkjv\nAaM3zNBe6oShIu3t2b715xn87yTApqo6fx/7+Fl7PQZ4qqqW7tmgqt7fziL+PbA1yV5thnAM8K+r\n6v/+2uCSO4DXJZkAVgKfnKH9QXy0tDfvqUjDexqY/n/1dwKnJ3kdQJLfSPLP9uzQfrDpB0nObe2S\n5M1t/bVVdVdVfQx4gt5v4vR/xjD+lt4Tqmn7XNo+t4CvAZ+h91j2H++vvdQVQ0Ua3jXAN5LcWlW7\ngN8FvpzkXnoh8/p99PtPwEVJvgtsA1a0+p8muS/J/cC3gO8Ct9K7PDXUjXrgg8BkknuTPAC8v2/b\nDcB7+NWlr5naSy+Yj76XJHXGMxVJUme8US8dppJcCHxoj/LtVXXxOMYjDcPLX5Kkznj5S5LUGUNF\nktQZQ0WS1BlDRZLUGUNFktSZ/w9lZsRU/EFK2AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xbe0be80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(train.interest_level)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "获取训练数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "train = train.drop(['interest_level'], axis=1)\n",
    "x_train = np.array(train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "准备k折交叉校验"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from sklearn.metrics import log_loss\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "kfold = StratifiedKFold(n_splits=2, shuffle=True, random_state=3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义交叉校验方法"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def modelfit(alg, X_train, Y_train, cv_folds=None, early_stopping_rounds=5):\n",
    "    xgb_param = alg.get_xgb_params()\n",
    "    xgb_param['num_class'] = 3\n",
    "    \n",
    "    xgtrain = xgb.DMatrix(X_train, label = Y_train)\n",
    "        \n",
    "    cvresult = xgb.cv(xgb_param, xgtrain, num_boost_round=alg.get_params()['n_estimators'], folds =cv_folds,\n",
    "             metrics='mlogloss', early_stopping_rounds=early_stopping_rounds)\n",
    "  \n",
    "    cvresult.to_csv(dpath + '1_nestimators.csv', index_label = 'n_estimators')\n",
    "    \n",
    "    n_estimators = cvresult.shape[0]\n",
    "    \n",
    "    print(\"The best n_estimators is \" + str(n_estimators))\n",
    "    \n",
    "    alg.set_params(n_estimators = n_estimators)\n",
    "    alg.fit(X_train, Y_train, eval_metric='mlogloss')\n",
    "    \n",
    "    train_predprob = alg.predict_proba(X_train)\n",
    "    logloss = log_loss(Y_train, train_predprob)\n",
    "    \n",
    "    print (\"logloss of train :\")\n",
    "    print(logloss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "xgb1 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=500,\n",
    "        max_depth=3,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel=0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The best n_estimators is 381\n",
      "logloss of train :\n",
      "0.562950464909\n"
     ]
    }
   ],
   "source": [
    "modelfit(xgb1, x_train, y_train, cv_folds = kfold)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "读取交叉验证结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cvresult = pd.DataFrame.from_csv(dpath + '1_nestimators.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "画出交叉验证结果图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc2995f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "\n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std']\n",
    "\n",
    "x_axis = range(0, cvresult.shape[0])\n",
    "\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds, label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds, label='Train')\n",
    "\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig( dpath + 'n_estimators4_1.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "画出详细图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1oAAANGCAYAAADktv9+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XmYZWV9J/DvCy0oarcCUeyIdoxx\nIXHHSIxxjcHR6CSOE5WYuMQ40YnR0ZiBngSRKMZk4r4lo5GYGNe4jKIibhMXXMDgBm4oizYBF+gG\nGiga3vnj3GsXRS23bp17z10+n+e5T1ede+45v3vrVnV96/e+7ym11gAAANCefbouAAAAYNYIWgAA\nAC0TtAAAAFomaAEAALRM0AIAAGiZoAUAANAyQQsAAKBlghYAAEDLBC0AAICWCVrA3Cil/EMp5apS\nyl2Wue/oUkotpTxyyfbNvfs+X0q5pJRydSnlwlLKh0spR5VS9l+077beMRbfdpVSvlxKeXYpZd9x\nPM/VlFKeUUp5Utd1bEQp5YBSynGllAcuc9+Teq/7tg7q2tqr6+7jPneXSiknllIu67qOJOm9/rWU\ncnDXtQAIWsA8eXaS/0jyj6WUG/Q39oLXC5KcWGt9/6Ltv5Dk35P8rySfTvL7SR6c5JlJfpDkH5L8\n+TLneVWSX+ndfifJZ5K8LMlft/+U1u0ZSZ7UdREbdECS5yd54DL3nZTmdb9gnAX1bE1T11wFLQCW\nt6nrAgDGpda6q5TyB0k+kiYgPb8XuP4pyYVpgliSpJSyKcl7kxyY5JdrrWctOdw7SinHJ7nHMqc6\nr9b6uUWff7iU8ktJHp/kua09Ia6n1vrDJD/suo42lVIOqLXu7roOANZHRwuYK7XWjyZ5fZLtpZR7\nJTkuyd2S/EGtdeeiXX87yWFJXrRMyOof69xa63sHPPXOJFcv3lBK2aeU8mellG/0hjReVEp5cynl\n1ksfXEp5Sm8I4pWllJ+UUt5TSrnzkn1uV0p5WyllR+94F5ZSPtYfylZKOSfJLyZ5wKKhjeesVnRv\nn1eXUn6vlHJWKWV3r47fHPB5Lz7WfqWUP1/0fH9YSnlTKeVnluz34FLKJ0spPy6lXFFKOa+U8q+9\nIYPbsjdIPX/R8zix99jrDR3sHetrpZRfKaV8tnfMc0opT+7d/4hSypd6z+2rpZSHLann9r06v93b\n5wellPcvHoLaG8b4xd6nb1pU13GL9nlUKeXU3jEuLaWcUkr5lSXn6g99u2cp5V2llIuTnN27b9Wv\n7wqv+bN7x7v9Mve9pJSy0B9mV0q5RynlA7334VW985y03PtxGKWU+/XqvbT3Gny2lPKIFfY7tfde\n/0Ep5S9LKU9d+nXdYC2/VEp5Xynl4t55ziilPHHJPvv03q/f7L1nLimlfKWU8qxF+/xMKeXvSynn\nL3pPf6aU8utt1AlMNx0tYB49L8mRSd6V5NAkr6+1nrJkn4f2/v2/Qxx/n9J0xJJkS5L/nORhSV6y\nZL/XJXlaklcn+UCSbUn+MskDSyn3rLX+KElKKcckOSHJW5Mck+SgNAHx1FLKvWut3+4d74NJ9k3y\nZ0nOS3JwkvsmuVnv/t/uPeedaYYQJslVAzyfRyS5d5Jjk1zWO/57Sil3rLV+d4DHp5SyT5L3Jfm1\nNEMoP5vktmmGbH6ylHJ4rfWK3i/SJyX5VJKnJLkkyc+mef32SzMk8GFJPpzkjUne0DvFWl2sQ5K8\nqXfu76cZ/vkPpZRDkzwmzeu7s/cc31tKuV2tdUfvsVuT/DjJ0b3zHJjkiUk+X0q5R631m0m+lOTJ\nvXO8sPcc0jtXSilHJXlLmm7q45Ps33sdP1lKeUit9dNL6n13krel+aPAjXvb1vr6Luef07zvnpRF\nw1xLM1/wCUneX2v9USnlxklOSfK9JP89TYf3kCQPSnLTVY4/kFLKA3rH/0qSP0jzvntGkveXUh5f\na317b7+79vb7VprXeHeSP+rV2opSyh3TvP8uSvInab62T0hyYinllrXW/hDfP0vzffbCJP+W5AZJ\n7pTrvt7/lOSeaYYXf6t33z3TfI8C867W6ubm5jZ3tzS/7NY0v7jfZJn7P9S7f/8l20uaP1L1b/su\num9b7zHL3d60ZN879ba/Zsnxf7m3/UW9z2+W5pfNk5bsd2iSK5O8pff5Qb3HPWuN5/21JJ9cx+tU\n08xru+mibbdMck2So9dxnMf1jvXoJdsP721/eu/z/9L7/G6rHOvg3j7HLXPfk3r3bVu07ZO9bfda\ntO3AJHt6r+3WRdvv1tv3maucf980v3R/K8lLl3kuT1qy/z5p5vR9Jck+i7bfJE2g+cyibcf1jvGC\nJccY6Ou7Qr3/muT8Jef+T73j/Wbv83v1Pv/PQxz/xCSXrbHPqb3nepNF2/ZN8tVebaW37R1pwvzB\nS16/ry/9uq5wnv7rd/Aq+7y1971z6JLtH0xyeZItvc/fn+Tf1zjfpUlett7XzM3NbT5uhg4Cc6fX\nXXlmkmuT3CLNL9eDelaaIYD925eX2ecVaTpA907TEdieZlGMty7a50G9f09c/MBa6xeSnJXkIb1N\nv5LkRsvsd36Sjy/a7ydphpg9r5TynN4wsLZ+xn+i1nrponNfmKYbcNt1HOM303Sn3l9K2dS/JTkj\nTZB7YG+/M5IsJPn7UsoTSym3a+MJJLmg1np6/5Na60/SPIcz6t7OVdK89smi59ardXsp5cxSykKa\ngLaQ5BeSXGf45grumKYr9k+11msX1XBZmhB0RCnlgCWP+dcln2/k6/umJLdOsng425PTvO4f6n3+\nnSQXJ3lJKeWPSimHDXjsNfW6ZfdJ8q7ec06S1FqvSdMRunWa1yhJHpDk47XXze3td22aANaWByf5\nWO97aLET0yy00h/O+YUkdyulvLaUcmQpZfMyx/pCkif1hhgeURYtsgMgaAHz6E/T/DJ1VJJvpxlC\ndqMl+5zX+3dpmPiX7A1RX1rh+N+vtZ7Wu32y1vriNEMC/2sp5cjePv2hRcutjrdj0f0D7VdrrWlC\n18lphjx9KckPSymvLKVsdOjXj5fZdlWaADioW6bpzi3kukH16jRD1A5Oklrr2WkCwUVJXpPk7FLK\n2YvnxQzpJ8tsW1i6vda60Pvwhos2vzTN1++9SR6ZJjTcO03IHuQ1WOtruE+Smy/Zfp19N/j1/VDv\neP05aTdP8qgkb+6FndRmfuID0gTdE5J8vTdH6wUthIebp+kEr/T8k+u+3y9cZr/ltg3roAFreXGa\nnxVHpHkNf9ybY3b4osc8Nsk/Jnlqmq7dT0ozz/KQFusFppSgBcyV3l/qj0/zS+bb0ww1u32SFy3Z\ntT9n61GLN9ZaL+qHqDTDhgb1ld6//e5ZP7zcapl9tyb50Tr3S20W5/iDWushaToEL0szD+Zv1lHn\nqPwozXO59wq3/pyx1Fo/VWt9ZJr5bUek+QX25aWUx4276J4npHm/bK+1nlxr/ULv6z/otZrW+hpe\nm6abtFhduuOwX99FnaPfKqXcLM0fGPZP0+lavN9Xa62PSxM07p7k7WnmrG10pcyL0zzHlZ5/ct33\n+y2X2a/N4PLjQWqpte6ptb601nrPNENNH59myO7J/Q5krfVHtdZn11q3pfmjzDFJHp0lHWhgPgla\nwNzoDVX7xzS/SD0rSWqzDPtLkzyrlPKri3Z/T5Iz06xOeKcWTt9fGe6i3r8f7/17nUn+pZR7pxmO\n9rHeplOTXLHMfrdObwjUciertX6r1vrCNHNg7rnorvV2otrygTS/wO+7qNu3+PbNpQ+otV5Ta/18\nmsUZkr3Po7+Ax7ieR82SRUN6q+X97JL9Vqrrm2nmaB1VSimLjnHjNHPSTq3rXL59la/vSt6Upkv3\n+DR/XDi11vqNFY5da61frrX+jzTDPQc5/mq1Xp7k80kevbhz3Bv6+IQ0C4Z8q7f5/yV5cFl0weHe\nfv91IzUs8bHeObYu2f77aebsfW7pA2qtl9Ra35Wmy3pgmvmYS/c5r9b66jR/pNnQawbMBqsOAvPk\nmDQLFvynWusli7b/RZohYf9QSrl7rfWKWus1pZTfSjNU6wullP+TZlGFi9MMgbtPmu7Ucku/36aU\nckTv4xunGaZ4TJJz06wml1rrN0spf5/kmaWUa9MMTdqWZoja+Wm6Fam1XlJK+cskJ5RS3pxmntdB\naS6Me2WaVfv6q7W9Osk70wyHXEgTxO6a5K8W1fbVJI8rpTw2yXeTXFlr/ep6XsQhvS3J7yb5YCnl\nFWnmtlydZn7Og5K8r9b6nlLKH/XqPinN8M0bpll9MEk+miS11ktLKecm+c+llI+lGf73o1rrOSOq\n/QNp5uF8I01n8l5pVq78/pL9zk4Tin+3lHJWmkUddtRad5RS/izNqoMfKKX8XZqO0vPSvJeOXquA\ndXx9l1Vr/UYp5dQ078ND06x2ufj4v5mmO/beNO+LkqYzc7Ps7e6uZt9SymOW2X55rfVDvfOekuQT\npZT/3av/GUl+Kcnje0Mjk6az/MgkHyulvCjN6/lH2bvy4rUZzCNLKdfrOPfC0gvSzBn8RGmuhfeT\nNO/NRyT5s94wypRS3p9m8ZjT0qw2eds019o7N8m3SylbknwizXDib6TpcN87zaqY7x6wTmCWdb0a\nh5ubm9s4bmlC0UKSv1/h/iPSrKT30iXbN6f5JfEL2XstrAvTLNP9jCQHLNp3W66/2uAVaToaL0ty\nyJJj75Nmvs03e7X9ML3FAZap7w/SzAm6Kk2X4b1JDlt0/y3SdC36v+Bf2tv/2bnuaoe3TRMed/Xq\nO2eN160mefUy289JcuI6vwab0gxDO6P3ulzaq/f1SW6/6Ovw7t7xr0zTffxkkkcuOdZD0sxTurJX\n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\n9bB09109K8mnkjyptfaKSZ8PAAA7MOn7uPokcLFF1dq6606stMES7/v27duXPXv2zLo7AACrZTuB\n61c+kZxyh919327aELiW3v79+7N3794k2TtYz2FLZrkYBgAA3NC0n8l1wZaWB1jf2oHuHi73cTFG\n0AIAYD5NK3C99qf6acfCGYyY9WIYAACwuUnfw3XIjZJrr+6vvfE+ml64klS0AABYDJOqcP3Pt/Xb\n3jiVrpWkogUAwGLpe2n4m91+921shRULV4qgBQDA4hoNXYkl4pkbpg4CALA8pr1i4W6YUrjUBC0A\nANip8966+zYsEb+UBC0AAJbPtCpbf/cL/banyrU03KMFAMDymvQ9XEfeKrni0v7aG3If18JT0QIA\nYHX0Xel67D/2085GVLgWlooWAACrp68l4g85tJ/+HIwK18IRtAAAWG3D0LVIS8MPCV5zy9RBAABI\nFmtpeOaeoAUAAKOmHbg++a6dH2tp+LklaAEAwHqmFbj+5uf6acfCGXPFPVoAALCZSd/DVYck7dr+\n2nMf11xQ0QIAgK2YVIXrUa/tt71xKl0zoaIFAADb0dfS8EO3vsfu29gKS8RPlaAFAAA7NRq6ksVa\nIl7gmihTBwEAoC+LtES8KYUTJWgBAEDfphW4Xvf43bdhifiJMHUQAAAmZdJTCz/x9v7aSqxY2CMV\nLQAAmJa+K113PrGfduidihYAAExbXysX/uALk397Uz99Wo+FM3ZM0AIAADZnSuG2mToIAACztEgr\nFQ5ZsfCgBC0AAJgHixi4rFi4IUELAADmybQD15l/2E87qlzXI2gBAMA8mlbgOuP5/bYncCURtAAA\nYL5NOnDd5lsn0+6KBy6rDgIAwCIYf/hx0k+IedTpySl32H07G1nRJeJVtAAAYFEt0gIaK1bhErQA\nAGDRLWLguuKzS71ioaAFAADLYtqB69y/ns73LCBBCwAAls20AtdbntpPO0s4rVDQAgCAZTXpwHXk\nrfptb4kCl6AFAADLblKB6+fe1W97Q0sQuCzvDgAAq6LvJeIPPXx3/VliKloAALDKFmnFwgUiaAEA\nANMPXJ94+3S+Z0YELQAA4DrTClyve/xk258xQQsAALihSQeumxw9mXbnhMUwAACAjY0voLF2Zbcq\n4G497j3J8++y+3bmlKAFAABs3Wjw2tWKhTc6+D77Lky+5s47/44ZMnUQAADYmUlPL9xz28m0OwWC\n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\nSf463V9WX5fkt5Mcm+QuI+P0f5L89ySPHhxzSpKjkxzfWrtmOmey/Krqj5I8Ksn/SDeFZmhfa+0/\nB/tsOhaD5ag/lO5/cH81yc1z3cqST5jOmSy3g41TVX1jkh9P8qYkn0ty13TLgf9nknsPrxk//yav\nqn473X2o/5HkqHQrBj4tyfe31t7uepofm41Vkn+Pa2q5zHrZQ1u3JXl1kovSLcH6mXT/ILzryOeV\n7h+KF6dbbvUfknzzrPu9Clu60NTW2U7d6tik+0vrL5PsH2x/meRmsz63Zdo2G6ckX5VuBa3LBtfY\nBYP3bz/Wxo2TvCjJ55McSPefH7efxfks87bBOLUkj97OWKQLym8YfP75wf5HzPr8lmU72Dilqwj/\nw+DP/qokn0jyB0luPtaOn3+TH6s/TXL+YBwuS/L3SU4Y+dz1NCfbZmPlmlq+TUULAACgZ+7RAgAA\n6JmgBQAA0DNBCwAAoGeCFgAAQM8ELQAAgJ4JWgAAAD0TtAAAAHomaAEAAPRM0AJgpVXV+VX1pFn3\nA4DlImgBsBKq6tFV9aV1Prp3kpdM4fsFOoAVctisOwAAs9Ra++ys+7AdVXV4a21t1v0AYHMqWgBM\nVVW9u6peWFW/V1VfqKpLqurkLR67t6peUlWXVdX+qnpnVd1j5PN7VNW7qurywecfqKp7VdUDkvx5\nkr1V1QbbyYNjrldpGnz2uKp6Q1UdqKp/rar7VNUdBn2/sqrOrKpvHDnmG6vqb6vq0qq6oqreX1Xf\nO3rOSb42yfOH3z/y2cOr6iNVddWgL788ds7nV9UzqurUqtqX5KVVdXhVvbiqLq6qLw/2OWlbAwHA\nRAlaAMzCTye5Msm3J/m1JM+qqhM2O6CqKskbkxyT5MQkxyc5O8k7qurmg91ekeTCdNMBj0/yO0mu\nTvLeJE9Ksj/JrQfbKZt83TOTvDzJcUk+luSVSf4kyXOS3Guwz4tH9j8yyZuSfG+SeyZ5a5LXV9Wx\ng89/aNCvZ418f6rq+CSnJ3l1krsnOTnJs6vq0WP9+dUk5w7O6dlJnpjkIUl+NMmdk/xEkvM3OR8A\npszUQQBm4V9aa785+P3Hq+oXkzwwyds3Oea704WRW7bWrhq89ytV9dAkP5zuPqtjkzy3tfaxYdvD\ngwfVoNZau2QL/fvz1trpg+N+N8mZSZ7dWnvr4L0/SFchS7pGP5zkwyPHP6OqHpYuDL24tfaFqrom\nyeVj3/+UJO9orT178Pq8qrprumB16sh+72ytfSUYDgLcx5O8p7XWklywhXMCYIpUtACYhX8Ze31x\nklse5Jjj01WOPj+YnndFVV2R5OuTDKfxPS/Jy6rq76vqaaPT+3bRv0sHv54z9t6Nq2pPklTVTQdT\nIT9aVV8a9Oub0gW/zdwlyRlj752R5I5VdejIe2eN7XNqumrbvw2mYX7fQc8IgKkStACYhavHXrcc\n/O+kQ9IFsuPGtjsneW6StNZOTnK3dFMMvyfJRweVpd30r23y3rDPz03y8CS/nuQ7B/06J8nhB/me\nGmlr9L1xV46+aK2dnS5gPjPJVyU5var+6iDfBcAUmToIwKI4O939Wf/VWjt/o51aa+clOS/dwhOv\nSvKYJH+TZC3JoRsdt0vfmeTU1trfJElVHZnk68b2We/7P5rkfmPv3TfJea21azb7wtba/iSvSfKa\nQch6S1XdvLX2hZ2dAgB9UtECYFH8fbp7pV5XVQ+qqq+rqvtW1f8arCz4VYOV+B5QVV9bVf8t3aIY\n/zo4/vwkR1bVA6vqFlV1kx779okkP1RVxw1WQXxlbvh37PlJ7l9Vt62qWwze+/0kD6yqZ1bVnarq\np5P8YjZfqCNV9eSqemRVfVNV3SnJjyS5JMl6zwkDYAYELQAWwmDRhxOT/GOSP0tXtXp1usrRpUmu\nSXJ0utUCz0u3mt+bk/zG4Pj3JvnjdFWgz6Zb7bAvT07yxXSrG74+3aqDZ4/t86xBXz85+P7hFMAf\nTfLIdKsK/laSZ7XWTj3I912R5Knp7t16/6DdE1tr1+76TADoRXV/bwEAANAXFS0AAICeCVoAzIWq\n+vHRZdvHto/Mun8AsB2mDgIwF6rqqCS32uDjq1trHsoLwMIQtAAAAHpm6iAAAEDPBC0AAICeCVoA\nAAA9E7QAAAB6JmgBAAD0TNACAADomaAFAADQs/8PNjb08tbXzuwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0xc2992e8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "cvresult = pd.DataFrame.from_csv(dpath + '1_nestimators.csv')\n",
    "\n",
    "cvresult = cvresult.iloc[50:]\n",
    "# plot\n",
    "test_means = cvresult['test-mlogloss-mean']\n",
    "test_stds = cvresult['test-mlogloss-std'] \n",
    "        \n",
    "train_means = cvresult['train-mlogloss-mean']\n",
    "train_stds = cvresult['train-mlogloss-std'] \n",
    "\n",
    "x_axis = range(50,cvresult.shape[0]+50)\n",
    "        \n",
    "fig = pyplot.figure(figsize=(10, 10), dpi=100)\n",
    "pyplot.errorbar(x_axis, test_means, yerr=test_stds ,label='Test')\n",
    "pyplot.errorbar(x_axis, train_means, yerr=train_stds ,label='Train')\n",
    "pyplot.title(\"XGBoost n_estimators vs Log Loss\")\n",
    "pyplot.xlabel( 'n_estimators' )\n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig(dpath + 'n_estimators_detail.png' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
